home *** CD-ROM | disk | FTP | other *** search
/ Tripas 4 / TRIPAS 004.iso / sin.EXE / SIN / BASE / maps / intro.scr < prev    next >
Encoding:
Text File  |  1998-11-03  |  51.1 KB  |  1,779 lines

  1. //==========================================
  2. // Intro Map Script
  3. // Tom Mustaine - Ritual Entertainment
  4. //==========================================
  5. // This map is not deathmatchable
  6. //parm.deathmatch getcvar deathmatch
  7. //parm.deathmatch ifnotequal 0 goto maps/intro_dm.scr::start
  8. //parm.deathmatch ifnotequal 0 goto end_singleplayer_script
  9. //goto single_player_script_start
  10. //end
  11.  
  12. //end_singleplayer_script:
  13. //end
  14.  
  15. //==========================================
  16. // Intro Dialog
  17. single_player_script_start:
  18.  
  19.     setdialogscript dialog/dialog_intro.scr
  20.  
  21. //
  22. //==========================================
  23.  
  24. //==========================================
  25. // Jump to Intro Cinematic
  26. //==========================================
  27.  
  28.     $skip_trigger hide
  29.     thread banktimecon
  30.     goto cinematic
  31.      end
  32.  
  33. //------------------------------------------
  34. //******************************************
  35. //==========================================
  36. // Main thread and Script init
  37. //==========================================
  38. //******************************************
  39. //------------------------------------------
  40. mainthread:
  41.     thread helicopter_damage_thread        // Heli Damage sound thread
  42.     thread rotors_spin_down_thread        // Rotor spindown for end
  43.     thread billboard_thread            // Billboard setup and wait
  44.     thread ammo1_thread            // Ammobox1 wait
  45.     thread ammo2_thread            // Ammobox2 wait
  46.     thread bank_entrance_thread        // Awning collapse and wait thread
  47.     thread t1000_secret            // Easter egg
  48.  
  49. // Initial Level variable setup
  50.  
  51.     level.count_bad_guys = 0
  52.     level.count_good_guys = 0
  53.     level.PObjective1 = 0
  54.     level.PObjective2 = 0
  55.     level.PObjective3 = 0
  56.     level.SObjective1 = 0
  57.     level.found_secrets = 0
  58.     level.total_secrets = 1
  59.     level.tree_death_toll = 0
  60.     game.intro_start = 1
  61.     $door1    notsolid            // Fix guys getting caught on doors
  62.     $door2    notsolid            // Fix guys getting caught on doors
  63.     $door3    notsolid            // Fix guys getting caught on doors
  64.  
  65.     thread turret_death_wait        // Turret death counter
  66.     thread turret1_deathreport        // Object waiting for turret death
  67.     thread turret2_deathreport        // Object waiting for turret death
  68.     thread turret3_deathreport        // Object waiting for turret death
  69.     thread MissionComputer            // Mission Computer
  70.     thread SkillLevelSettings        // Skill level settings
  71.     thread pillar                // Awning trigger thread
  72.     thread heli_damage_dialog        // Helicopter damage dialog thread
  73.     thread random_sounds            // Random sounds near player head
  74.                                                                                                                                                                                                                                                                                                                                                                                                                                                    thread shootsign            // Smart ass remark sign
  75.      end
  76. //==========================================
  77. //------------------------------------------
  78. //==========================================
  79.  
  80.  
  81. //------------------------------------------
  82. //******************************************
  83. //==========================================
  84. // All cinematic stuff
  85. //==========================================
  86. //******************************************
  87. //------------------------------------------
  88. cinematic:
  89.  
  90.     cinematic            // start up as a cinematic
  91.     skipthread skip_sequence    // setup our skip thread
  92.     waitforplayer            // wait till the player is spawned
  93.     freezeplayer            // freeze the player
  94.     fadeout 0.5 0 0 0        // fade out
  95.  
  96.     thread initialize_thread    // Setup level and actors
  97.     local.waitforthread = parm.previousthread
  98.     waitForThread local.waitforthread
  99.  
  100.     thread PoliceCar1_Movie            // Start Car1
  101.     thread PoliceCar2_Movie            // Start Car2
  102.  
  103.     thread camera_thread            // Start Camera
  104.     level.camerathread = parm.previousthread
  105.     thread pigeon_thread            // Start Pigeon
  106.     level.pigeonthread = parm.previousthread
  107.     $roofblade thread ignore_thread        // Actors ignore everything
  108.     $groundblade thread ignore_thread    // Actors ignore everything
  109.     $cinematic_thug1 thread ignore_thread    // Actors ignore everything
  110.     $cinematic_thug2 thread ignore_thread    // Actors ignore everything
  111.      end
  112.  
  113. //==========================================
  114. // Main Cinematic Skip Sequence
  115. //==========================================
  116. skip_sequence:
  117.     fadeout 0.1 0 0 0
  118.     noncinematic            // no longer a cinematic
  119.     wait 0.1            // wait for fade out
  120.     cueplayer            // go back to the player
  121.  
  122.     level.camera2started ifequal 1 terminate level.camera2thread    // kill any threads we have going
  123.     terminate level.camerathread
  124.     terminate level.pigeonthread
  125.  
  126.     $pigeon remove            // remove that darn pigeon
  127.  
  128.     thread helicopter_setup_thread    // setup helicopter
  129.     local.WaitingForThread = parm.previousthread
  130.     waitForThread local.WaitingForThread
  131.     //waitForThread parm.previousthread
  132.  
  133.     $helicopter jumpto $hover_path
  134.     thread mainthread        // Skip to action!
  135.     local.WaitingForThread = parm.previousthread
  136.     waitForThread local.WaitingForThread
  137.     thread start_action_thread
  138.      end
  139.  
  140. //==========================================
  141. // Cinematic/Level Initilize thread
  142. //==========================================
  143. initialize_thread:
  144.     hud 0                // Kill hud for Cinematic
  145.     music none            // No music
  146.     $sun1 remove
  147.     freezeplayer
  148.     $camera2 moveto $cam2start
  149.     $node hide
  150.     $node notsolid
  151.     $lookatme hide
  152.     $lookatme notsolid
  153.     $roofblade hide
  154.     $groundblade hide
  155.     $groundblade notsolid
  156.     $roofblade notsolid
  157.     $node time .1
  158.     $node rotateYup 180
  159.     waitFor $node
  160.     music aux5 none
  161.     $cinematic_thug1 anim talk1
  162.     $cinematic_thug2 anim talk1
  163.      end
  164.  
  165. //==========================================
  166. // Police Car #1 go
  167. //==========================================
  168. PoliceCar1_Movie:
  169.     local.Movie = 1
  170.     local.WaitTime = 0
  171.     $policecar1_movie jumpto $police1_movie_start
  172.     $policetruck1_movie jumpto $police1_movie_start
  173.     $policetruck1_movie hide
  174.     local.VehicleName string "$policecar1_movie"
  175.     $policecar1_siren_movie bind local.VehicleName
  176.     wait 0.1
  177.      goto PoliceCar1_Movie_Loop
  178.  
  179. PoliceCar1_Movie_Loop:
  180.     local.VehicleName show
  181.     $policecar1_siren_movie playsound "environment/alarm/police/siren2.wav" 4
  182.     local.VehicleName followpath $police1_movie_start normalangles
  183.     waitFor local.VehicleName
  184.     wait local.WaitTime
  185.     $policecar1_siren_movie stopsound
  186.  
  187. level.piller ifequal 2 goto movieend1
  188.  
  189.     $police1_movie_launcher launch rocket
  190.     wait 0.3
  191.     parm.VehicleName string local.VehicleName
  192.     thread Police1_Movie_CarExplode
  193.     local.waitforthread = parm.previousthread
  194.     waitForThread parm.previousthread
  195.     local.VehicleName jumpto $police1_movie_start
  196.     local.Vehicle randomint 100
  197.     local.Vehicle ifgreater 50 local.VehicleName string "$policetruck1_movie"
  198.     local.Vehicle iflessequal 50 local.VehicleName string "$policecar1_movie"
  199.     $policecar1_siren_movie bind local.VehicleName
  200.     local.WaitTime randomint 10
  201.     local.WaitTime += 1
  202.     wait local.WaitTime
  203.     local.Movie ifequal 1 wait 15
  204.     local.Movie = 0
  205.       goto PoliceCar1_Movie_Loop
  206.      end
  207.  
  208. movieend1:        // Stop Car from moving
  209. end
  210.  
  211. //==========================================
  212. // Police Car #1 explode
  213. //==========================================
  214. Police1_Movie_CarExplode:
  215.     local.VehicleName string parm.VehicleName
  216.     local.VehicleName time 0.6
  217.     local.VehicleName moveUp    128
  218.     local.VehicleName moveWest  24
  219.     local.VehicleName rotateXup  -60
  220.     trigger $police1_movie_boom
  221.     //local.VehicleName shatter "1 1 1" 20 10 40 .05 0
  222.     $policecar1_siren_movie playsound "environment/alarm/police/siren2down.wav" 3
  223.       waitFor local.VehicleName
  224.  
  225.     local.VehicleName time 0.3
  226.     local.VehicleName moveUp    64
  227.     local.VehicleName moveWest   12
  228.     local.VehicleName rotateXup  -30
  229.       waitFor local.VehicleName
  230.  
  231.     local.VehicleName time 0.9
  232.     local.VehicleName moveDown  128
  233.     local.VehicleName moveWest    36
  234.     local.VehicleName rotateXup  -90
  235.     trigger $police1_movie_boom
  236.     local.VehicleName shatter "1 1 1" 40 20 40 .05 0
  237.       waitFor local.VehicleName
  238.  
  239.     local.VehicleName hide
  240.     local.VehicleName time 0.1
  241.     local.VehicleName rotateXup  180
  242.     trigger $police1_movie_boom
  243.       waitFor local.VehicleName
  244.      end
  245.  
  246. //==========================================
  247. // Police Car #2 go
  248. //==========================================
  249. PoliceCar2_Movie:
  250.     local.Movie = 1
  251.     local.WaitTime = 4
  252.     $policecar2_movie jumpto $police2_movie_start
  253.     $policetruck2_movie jumpto $police2_movie_start
  254.     $policetruck2_movie hide
  255.     local.VehicleName string "$policecar2_movie"
  256.     $policecar2_siren_movie bind local.VehicleName
  257.     wait 4
  258.       goto PoliceCar2_Movie_Loop
  259.  
  260. PoliceCar2_Movie_Loop:
  261.     local.VehicleName show
  262.     $policecar2_siren_movie playsound "environment/alarm/police/siren2.wav" 4
  263.     local.VehicleName followpath $police2_movie_start normalangles
  264.     waitFor local.VehicleName
  265.     wait local.WaitTime
  266.     $policecar2_siren_movie stopsound
  267.  
  268.     level.piller ifequal 2 goto movieend2
  269.  
  270.     $police2_movie_launcher launch rocket
  271.     wait 0.3
  272.     parm.VehicleName string local.VehicleName
  273.     thread Police2_Movie_CarExplode
  274.     local.waitforthread = parm.previousthread
  275.     waitForThread parm.previousthread
  276.     local.VehicleName jumpto $police2_movie_start
  277.     local.Vehicle randomint 100
  278.     local.Vehicle ifgreater 50 local.VehicleName string "$policetruck2_movie"
  279.     local.Vehicle iflessequal 50 local.VehicleName string "$policecar2_movie"
  280.     $policecar2_siren_movie bind local.VehicleName
  281.     local.WaitTime randomint 10
  282.     local.WaitTime += 1
  283.     wait local.WaitTime
  284.     local.Movie ifequal 1 wait 15
  285.     local.Movie = 0
  286.  
  287.       goto PoliceCar2_Movie_Loop
  288.      end
  289.  
  290. movieend2:        // Car2 stop going
  291. end
  292.  
  293. //==========================================
  294. // Police Car #2 explode
  295. //==========================================
  296. Police2_Movie_CarExplode:
  297.     local.VehicleName string parm.VehicleName
  298.     local.VehicleName time 0.6
  299.     local.VehicleName moveUp    128
  300.     local.VehicleName moveNorth  24
  301.     local.VehicleName rotateZup  -60
  302.     trigger $police2_movie_boom
  303.     //local.VehicleName shatter "1 1 1" 20 10 40 .05 0
  304.     $policecar2_siren_movie playsound "environment/alarm/police/siren2down.wav" 3
  305.       waitFor local.VehicleName
  306.  
  307.     local.VehicleName time 0.3
  308.     local.VehicleName moveUp    64
  309.     local.VehicleName moveNorth   12
  310.     local.VehicleName rotateZup  -30
  311.       waitFor local.VehicleName
  312.  
  313.     local.VehicleName time 0.9
  314.     local.VehicleName moveDown  128
  315.     local.VehicleName moveNorth    36
  316.     local.VehicleName rotateZup  -90
  317.     trigger $police2_movie_boom
  318.     local.VehicleName shatter "1 1 1" 40 20 40 .05 0
  319.       waitFor local.VehicleName
  320.  
  321.     local.VehicleName hide
  322.     local.VehicleName time 0.1
  323.     local.VehicleName rotateZup  180
  324.     trigger $police2_movie_boom
  325.       waitFor local.VehicleName
  326.      end
  327.  
  328. //==========================================
  329. // First Camera Thread - MAIN CINEMATIC
  330. //==========================================
  331. camera_thread:
  332.     $pigeon speed 10
  333.     $pigeon moveto $pigeonstart
  334.     $camera moveto $pigeonstart
  335.     $camera follow $pigeon
  336.     $pigeon followpath $pigeonstart
  337.     cueplayer
  338.     $camera jumpcut
  339.     cuecamera $camera
  340.     fadein 2 0 0 0
  341.      end
  342.  
  343. //==========================================
  344. // Pigeon Thread - MAIN CINEMATIC
  345. //==========================================
  346. pigeon_thread:
  347.     $skip_trigger notrigger
  348.     $pigeon nextanim pigeon_fly
  349.     wait 1.5
  350.     $skip_trigger notrigger
  351.     $pigeon nextanim coast
  352.     wait 2.3
  353.     $pigeon nextanim pigeon_fly
  354.     wait 4
  355.     $pigeon nextanim coast
  356.     $pigeon nextanim coast
  357.     wait 4.5
  358.     $pigeon nextanim pigeon_fly
  359.     wait 1.5
  360.     $cinematic_thug1 anim attack
  361.     $pigeon nextanim coast
  362.     wait .8
  363.     music aux6 none
  364.     wait .2
  365.     trigger $cinematic_sound1
  366.     $pigeon gib 1 30 1 organic    // Piegon Dies
  367.     $pigeon gib 20 30 1 feather
  368.     wait .5
  369.     skipthread ""            // no longer a cinematic
  370.     thread camera2_thread
  371.     level.camera2thread = parm.previousthread
  372.      end
  373.  
  374. //==========================================
  375. // Cinematic actors ignore thread
  376. //==========================================
  377. ignore_thread:
  378.     local.self ignoreall
  379.     pause
  380.     goto ignore_thread
  381.      end
  382.  
  383. //==========================================
  384. // 2nd and 3rd Cinematic Camera Setup - MAIN CINEMATIC
  385. //==========================================
  386. camera2_thread:
  387.     level.camera2started = 1
  388.     $camera follow $node $lookatme
  389.     wait 2
  390.     thread camera3_thread
  391.     $camera follow $cam2start $lookatme
  392.     wait 2
  393.     $camera pause
  394.     wait 5
  395.     $camera continue
  396.     thread move_lookatme_thread
  397.     wait 8
  398.     fadeout 1 0 0 0
  399.     noncinematic        // we are no longer a cinematic
  400.     cueplayer
  401.     thread mainthread
  402.     thread start_action_thread
  403.      end
  404.  
  405. camera3_thread:
  406.     music aux7
  407.     parm.thug1 string $cinematic_thug1
  408.     parm.thug2 string $cinematic_thug2
  409.     thread dialog::thug_too_easy
  410.     thread helicopter_ride_thread
  411.     wait 1
  412.     $cinematic_thug1 anim talk2
  413.     wait 2
  414.     $cinematic_thug1 anim talk1
  415.     wait 1.5
  416.     $cinematic_thug1 anim talk2
  417.     wait 2.5
  418.     $cinematic_thug1 anim laugh2
  419.     wait .5
  420.     $cinematic_thug2 anim laugh2
  421.     wait 1
  422.     $cinematic_thug1 anim talk1
  423.     wait .5
  424.     $cinematic_thug2 anim talk1
  425.     wait 4.5
  426.     parm.thug1 string $cinematic_thug1
  427.     parm.thug2 string $cinematic_thug2
  428.     thread dialog::blade_suprise
  429.      end
  430.  
  431. move_lookatme_thread:
  432.     $lookatme time 5
  433.     $lookatme moveUp 128
  434.     waitFor $lookatme
  435.     $lookatme time 3.5
  436.     $lookatme moveUp 148
  437.     $lookatme moveEast 384
  438.     $lookatme moveSouth 96
  439.     waitFor $lookatme
  440.      end
  441.  
  442. //==========================================
  443. // Roof Cinematic - ROOF CINMEATIC
  444. //==========================================
  445. roofcam_thread:
  446.     cinematic
  447.     skipthread "roofcam_skip"
  448.     trigger $glass2
  449.     $helicopter time .1
  450.     $helicopter notsolid
  451.     $helicopter moveto $roofhelistart
  452.     *1 hide
  453.     $heligun show
  454.     $roofblade show
  455.     fadein 1 0 0 0
  456.     hud 0
  457.     freezeplayer
  458.     thread roofheli_thread
  459.     $roofcam jumpcut
  460.     $roofcam moveto $roofcamstart
  461.     $roofcam lookat $roofblade
  462.     freezeplayer
  463.     cuecamera $roofcam
  464.     $roofblade thread roofblade_thread
  465.     $roofcam follow $roofcamstart $roofblade
  466.     wait 6
  467.     $roofcam follow $roofblade
  468.     waitFor $roofcam
  469.     game.intro_start = 1        // Telling bank what exit player took
  470.     //thread exit_level_thread
  471.      end
  472.  
  473. roofblade_thread:
  474.     thread exit_anyhow_roof
  475.     $roofblade anim 1hand_idle3
  476.     wait 3.5
  477.     local.self walkto $roofpath1
  478.     waitFor $roofblade
  479.     local.self walkto $roofpath2
  480.     wait 1
  481.     fadeout 1 0 0 0
  482.     waitFor $roofblade
  483.     *1 take heligun
  484.     level.intermissiontype = 1
  485.     thread LevelComplete    
  486.     local.WaitingForThread = parm.previousthread
  487.     waitForThread local.WaitingForThread
  488.     map bank$start1
  489.      end
  490.  
  491. exit_anyhow_roof:
  492.     wait 8
  493.     *1 take heligun
  494.     level.intermissiontype = 1
  495.     thread LevelComplete    
  496.     local.WaitingForThread = parm.previousthread
  497.     waitForThread local.WaitingForThread
  498.     map bank$start1
  499.      end
  500.  
  501. roofcam_skip:
  502.     noncinematic
  503.     fadeout    1 0 0 0
  504.     wait 1
  505.     *1 take heligun
  506.     level.intermissiontype = 1
  507.     thread LevelComplete    
  508.     local.WaitingForThread = parm.previousthread
  509.     waitForThread local.WaitingForThread
  510.     map bank$start1
  511.      end
  512.  
  513. //==========================================
  514. // Ground Cinematic - GROUND CINEMATIC
  515. //==========================================
  516. groundcam_thread:
  517.     cinematic
  518.     skipthread groundcam_skip
  519.     *1 hide
  520.     $heligun show
  521.     $helicopter notsolid
  522.     $groundblade show
  523.     $groundblade thread groundblade_thread
  524.     $groundcam follow $groundcam_start $groundblade
  525.     $groundcam jumpcut
  526.     freezeplayer
  527.     cuecamera $groundcam
  528.     fadein 1 0 0 0
  529.     wait 4
  530.     $groundcam follow $groundblade
  531.     game.intro_start = 2        // Telling bank what exit player took
  532.     //thread exit_level_thread
  533.     wait 10
  534.      end
  535.  
  536. groundblade_thread:
  537.     thread end_level2_nomatterwhat
  538.     $groundblade anim 1hand_idle3
  539.     wait 3.5
  540.     local.self walkto $groundpath1
  541.     waitFor $groundblade
  542.     local.self runto $groundpath2
  543.     waitFor $groundblade
  544.     $groundblade runto $groundpath7
  545.     waitFor $groundblade
  546.     thread end_level2
  547.     $groundblade runto $groundpath8
  548.     waitFor $groundblade
  549.      end
  550.  
  551. end_level2:
  552.     fadeout 1 0 0 0
  553.     wait 1.5
  554.     *1 take heligun
  555.     level.intermissiontype = 2
  556.     thread LevelComplete    
  557.     local.WaitingForThread = parm.previousthread
  558.     waitForThread local.WaitingForThread
  559.     map bank$start2
  560.      end
  561.  
  562. end_level2_nomatterwhat:    // Exit level anyhow if blade dosen't reach pathnodes.
  563.     wait 10
  564.     fadeout 1 0 0 0
  565.     wait 1
  566.     *1 take heligun
  567.     level.intermissiontype = 2
  568.     thread LevelComplete    
  569.     local.WaitingForThread = parm.previousthread
  570.     waitForThread local.WaitingForThread
  571.     map bank$start2
  572.      end
  573.  
  574. groundcam_skip:
  575.     noncinematic
  576.     fadeout 1 0 0 0
  577.     wait 1
  578.     *1 take heligun
  579.     level.intermissiontype = 2
  580.     thread LevelComplete    
  581.     local.WaitingForThread = parm.previousthread
  582.     waitForThread local.WaitingForThread
  583.     map bank$start2
  584.      end
  585.  
  586. //******************************************
  587. //==========================================
  588. // End of Cinematic section
  589. //==========================================
  590. //******************************************
  591.  
  592.  
  593. //******************************************
  594. //==========================================
  595. // Other level threads
  596. //==========================================
  597. //******************************************
  598.  
  599. //==========================================
  600. // Banktime Console
  601. //==========================================
  602. banktimecon:
  603.     $banktime    time    10
  604.     $banktime    rotateY    10
  605.     level.hour = 3
  606.     level.tens = 1
  607.     level.mins = 2
  608.  
  609. banktimeconprint:
  610.     level.digit1 = level.tens
  611.     level.digit2 = level.mins
  612.  
  613.     local.PrintString string "xl 0 jcy fc 1 1 1 1.0 string \""
  614.     level.hour ifequal 1  local.PrintString append " 1:\" xl 60 jcy fc 1 1 1 1.0 string \""
  615.     level.hour ifequal 2  local.PrintString append " 2:\" xl 60 jcy fc 1 1 1 1.0 string \""
  616.     level.hour ifequal 3  local.PrintString append " 3:\" xl 60 jcy fc 1 1 1 1.0 string \""
  617.     level.hour ifequal 4  local.PrintString append " 4:\" xl 60 jcy fc 1 1 1 1.0 string \""
  618.     level.hour ifequal 5  local.PrintString append " 5:\" xl 60 jcy fc 1 1 1 1.0 string \""
  619.     level.hour ifequal 6  local.PrintString append " 6:\" xl 60 jcy fc 1 1 1 1.0 string \""
  620.     level.hour ifequal 7  local.PrintString append " 7:\" xl 60 jcy fc 1 1 1 1.0 string \""
  621.     level.hour ifequal 8  local.PrintString append " 8:\" xl 60 jcy fc 1 1 1 1.0 string \""
  622.     level.hour ifequal 9  local.PrintString append " 9:\" xl 60 jcy fc 1 1 1 1.0 string \""
  623.     level.hour ifequal 10 local.PrintString append "10:\" xl 60 jcy fc 1 1 1 1.0 string \""
  624.     level.hour ifequal 11 local.PrintString append "11:\" xl 60 jcy fc 1 1 1 1.0 string \""
  625.     level.hour ifequal 12 local.PrintString append "12:\" xl 60 jcy fc 1 1 1 1.0 string \""
  626.  
  627.     level.digit1 ifequal 0 local.PrintString append "0\" xl 80 jcy fc 1 1 1 1.0 string \""
  628.     level.digit1 ifequal 1 local.PrintString append "1\" xl 80 jcy fc 1 1 1 1.0 string \""
  629.     level.digit1 ifequal 2 local.PrintString append "2\" xl 80 jcy fc 1 1 1 1.0 string \""
  630.     level.digit1 ifequal 3 local.PrintString append "3\" xl 80 jcy fc 1 1 1 1.0 string \""
  631.     level.digit1 ifequal 4 local.PrintString append "4\" xl 80 jcy fc 1 1 1 1.0 string \""
  632.     level.digit1 ifequal 5 local.PrintString append "5\" xl 80 jcy fc 1 1 1 1.0 string \""
  633.     level.digit1 ifequal 6 local.PrintString append "6\" xl 80 jcy fc 1 1 1 1.0 string \""
  634.     level.digit1 ifequal 7 local.PrintString append "7\" xl 80 jcy fc 1 1 1 1.0 string \""
  635.     level.digit1 ifequal 8 local.PrintString append "8\" xl 80 jcy fc 1 1 1 1.0 string \""
  636.     level.digit1 ifequal 9 local.PrintString append "9\" xl 80 jcy fc 1 1 1 1.0 string \""
  637.  
  638.     level.digit2 ifequal 0 local.PrintString append "0\""
  639.     level.digit2 ifequal 1 local.PrintString append "1\""
  640.     level.digit2 ifequal 2 local.PrintString append "2\""
  641.     level.digit2 ifequal 3 local.PrintString append "3\""
  642.     level.digit2 ifequal 4 local.PrintString append "4\""
  643.     level.digit2 ifequal 5 local.PrintString append "5\""
  644.     level.digit2 ifequal 6 local.PrintString append "6\""
  645.     level.digit2 ifequal 7 local.PrintString append "7\""
  646.     level.digit2 ifequal 8 local.PrintString append "8\""
  647.     level.digit2 ifequal 9 local.PrintString append "9\""
  648.  
  649.     %introcon    conlayout    local.PrintString
  650.  
  651.     wait 60        // Wait time
  652.  
  653.     level.mins += 1
  654.     level.mins ifequal 10 goto uptens
  655.     goto banktimeconprint
  656.  
  657. uptens:
  658.     level.mins *= 0
  659.     level.tens += 1
  660.     level.tens ifequal 6 goto uphour
  661.     goto banktimeconprint
  662.  
  663. uphour:
  664.     level.tens *= 0
  665.     level.hour += 1
  666.     level.hour ifequal 13 goto switch
  667.     goto banktimeconprint
  668.  
  669. switch:
  670.     level.hour = 1
  671.     goto banktimeconprint
  672.      end
  673.  
  674. //==========================================
  675. // Neat stuff
  676. //==========================================
  677. t1000_secret:
  678.     $t1000origin    notsolid
  679.     $t1000origin    hide
  680.     $t1000 bind $t1000origin
  681.     wait .1
  682.     $t1000origin jumpto $t1000way1
  683.     $t1000 ignoreall
  684.     $t1000 anim sitting
  685.     //    $motorcycle    time    .2
  686.     //    $motorcycle    rotateYdown    180
  687.     //    waitFor $motorcycle
  688.     wait .1
  689.     $t1000 bind $motorcycle
  690.     wait .1
  691.     $t1000 group all +envmapped
  692.     $motorcycle    jumpto    $motoway2
  693.     $motorcycle    ontrigger start_t1000_secret
  694.     pause
  695.  
  696. start_t1000_secret:
  697.     $motoremove1 remove
  698.     $motoportal open
  699.     thread dialog::blade_what_the
  700.     trigger    $motobigexpl1
  701.     $motobreak1 shatter "0 180 0" 150 10 40 .4 0
  702.     $motobreak1 playsound    impact/comp_explode/cmpmx3.wav 4 8 -1
  703.     $motobreak1 remove
  704.     wait 2
  705.     $motorcycle    playsound    vehicle/atv/strt.wav 4 8 -1
  706.     wait 2
  707.     $motorcycle    playsound    vehicle/humvee/skid.wav 4 8 -1
  708.     $motorcycle followpath $motospline
  709.     waitFor $motorcycle
  710.     $motorcycle shatter "1 1 1" 20 10 40 .1 0
  711.     $motorcycle remove
  712.     $t1000 remove
  713.     trigger $motoexploder
  714.     level.found_secrets += 1
  715.     thread global/universal_script.scr::secret
  716.      end
  717.  
  718. tree_counter:
  719.     level.tree_death_toll += 1
  720.     //    print level.tree_death_toll
  721.     level.tree_death_toll ifequal 3 trigger $motorcycle
  722.      end
  723.  
  724. //==========================================
  725. // Goofy Alley sign getting shot thread
  726. //==========================================
  727. shootsign:
  728.     $shootsign1 ondamage sign_message
  729.     pause
  730.  
  731. sign_message:
  732.     $shootsign1 nodamage
  733.     thread dialog::jc_what_are_you_shooting_at1
  734.     local.waitforthread = parm.previousthread
  735.     waitForThread parm.previousthread
  736.     thread dialog::blade_can_it_jc
  737.      end
  738.  
  739. //==========================================
  740. // Turret Skill level settings
  741. //==========================================
  742. SkillLevelSettings:
  743.     local.skilllevel getcvar skill
  744.     //easy
  745.     local.skilllevel ifequal 0 $turret1 rocketrate 10
  746.     local.skilllevel ifequal 0 $turret2 rocketrate 8
  747.     local.skilllevel ifequal 0 $turret3 rocketrate 10
  748.     local.skilllevel ifequal 0 $turret1 health 500
  749.     local.skilllevel ifequal 0 $turret2 health 500
  750.     local.skilllevel ifequal 0 $turret3 health 800
  751.     //medium
  752.     local.skilllevel ifequal 1 $turret1 rocketrate 8
  753.     local.skilllevel ifequal 1 $turret2 rocketrate 6
  754.     local.skilllevel ifequal 1 $turret3 rocketrate 8
  755.     local.skilllevel ifequal 1 $turret1 health 1400
  756.     local.skilllevel ifequal 1 $turret2 health 1000
  757.     local.skilllevel ifequal 1 $turret3 health 1200
  758.     //hard
  759.     local.skilllevel ifequal 2 $turret1 rocketrate 4
  760.     local.skilllevel ifequal 2 $turret2 rocketrate 4
  761.     local.skilllevel ifequal 2 $turret3 rocketrate 4
  762.     local.skilllevel ifequal 2 $turret1 health 1500
  763.     local.skilllevel ifequal 2 $turret2 health 1500
  764.     local.skilllevel ifequal 2 $turret3 health 1600
  765.     $turret1    lagtime    1
  766.     $turret2    lagtime    1
  767.     $turret3    lagtime    1
  768.      end
  769.  
  770. //==========================================
  771. // Mission Status
  772. //==========================================
  773. MissionComputer:
  774. //0 nd 1 succeed 2 fail
  775. // level.PObjective1 --> Destroy Rocket Turrets
  776. // level.PObjective2 --> Eliminate All Enemy Forces
  777. // level.PObjective3 --> Gain Entry Into The Bank
  778. // level.SObjective1 --> Minimize Civilian Casualties
  779. %missioncon conlayout "xv -72 yv 76 fc 0.6 0.6 1 1 string \"Air Assault On FCB\""
  780. %missioncon conapplayout "xv -120 yv 60 fc 0.4 0.4 0.8 1 string \"Primary Objective(s):\""
  781. level.PObjective1 ifequal 0 %missioncon conapplayout "xv -118 yv 48 spicn b_blank 0.5 0.5 xv -116 yv 48 fc 0.7 0.7 0.7 1 string \" Destroy Rocket Turrets\""
  782. level.PObjective2 ifequal 0 %missioncon conapplayout "xv -118 yv 36 spicn b_blank 0.5 0.5 xv -116 yv 36 fc 0.7 0.7 0.7 1 string \" Eliminate All Enemy Forces\""
  783. level.PObjective3 ifequal 0 %missioncon conapplayout "xv -118 yv 24 spicn b_blank 0.5 0.5 xv -116 yv 24 fc 0.7 0.7 0.7 1 string \" Gain Entry Into The Bank\""
  784.  
  785. level.PObjective1 ifequal 1 %missioncon conapplayout "xv -118 yv 48 spicn b_checked 0.5 0.5 xv -116 yv 48 fc 0.3 0.3 0.3 1 string \" Destroy Rocket Turrets\""
  786. level.PObjective2 ifequal 1 %missioncon conapplayout "xv -118 yv 36 spicn b_checked 0.5 0.5 xv -116 yv 36 fc 0.3 0.3 0.3 1 string \" Eliminate All Enemy Forces\""
  787. level.PObjective3 ifequal 1 %missioncon conapplayout "xv -118 yv 24 spicn b_checked 0.5 0.5 xv -116 yv 24 fc 0.3 0.3 0.3 1 string \" Gain Entry Into The Bank\""
  788.  
  789. level.PObjective1 ifequal 2 %missioncon conapplayout "xv -118 yv 48 spicn b_notchecked 0.5 0.5 xv -116 yv 48 fc 0.3 0.3 0.3 1 string \" Destroy Rocket Turrets\""
  790. level.PObjective2 ifequal 2 %missioncon conapplayout "xv -118 yv 36 spicn b_notchecked 0.5 0.5 xv -116 yv 36 fc 0.3 0.3 0.3 1 string \" Eliminate All Enemy Forces\""
  791. level.PObjective3 ifequal 2 %missioncon conapplayout "xv -118 yv 24 spicn b_notchecked 0.5 0.5 xv -116 yv 24 fc 0.3 0.3 0.3 1 string \" Gain Entry Into The Bank\""
  792.  
  793. %missioncon conapplayout "xv -120 yv 0 fc 0.4 0.4 0.8 1 string \"Secondary Objective(s):\""
  794. level.SObjective1 ifequal 0 %missioncon conapplayout "xv -118 yv -12 spicn b_blank 0.5 0.5 xv -116 yv -12 fc 0.7 0.7 0.7 1 string \" Minimize Hardcorp Casualties\""
  795. level.SObjective1 ifequal 1 %missioncon conapplayout "xv -118 yv -12 spicn b_checked 0.5 0.5 xv -116 yv -12 fc 0.3 0.3 0.3 1 string \" Minimize Hardcorp Casualties\""
  796. level.SObjective1 ifequal 2 %missioncon conapplayout "xv -118 yv -12 spicn b_notchecked 0.5 0.5 xv -116 yv -12 fc 0.3 0.3 0.3 1 string \" Minimize Hardcorp Casualties\""
  797. end
  798.  
  799. //==========================================
  800. // Billboard destroyed thread1
  801. //==========================================
  802. billboard_thread:
  803.     $billboard hide
  804.     $billboard2 bind $billboard
  805.     $fountain_flood time .1
  806.     $fountain_flood moveDown 10
  807.     waitFor $fountain_flood
  808.     game.intro_billboard_fall ifequal 0 game.intro_billboard_fall = 1
  809.     $billboard_left ondamage billboard_fall_sequence_left
  810.     $billboard_right ondamage billboard_fall_sequence_right
  811.     pause
  812.  
  813. billboard_fall_sequence_left:
  814.     $billboard_left nodamage
  815.     $billboard_right nodamage
  816.     game.intro_billboard_fall = 2
  817.     wait .3
  818.     $billboard time .4
  819.     $billboard rotateXdown 56
  820.     $billboard moveWest 64
  821.     $billboard moveDown 30
  822.     waitFor $billboard
  823.     $billboard time .7
  824.     $billboard rotateXdown 98
  825.     $billboard rotateZup 5
  826.     $billboard moveDown 495
  827.     $billboard moveSouth 16
  828.     $billboard moveWest 128
  829.     waitFor $billboard
  830.     $billboard time .5
  831.     $billboard rotateXdown 85
  832.     $billboard rotateZup 5
  833.     $billboard moveDown 495
  834.     $billboard moveSouth 16
  835.     $billboard moveWest 128
  836.     waitFor $billboard
  837.     $billboard time .4
  838.     $billboard rotateXdown 71
  839.     $billboard rotateZup 5
  840.     $billboard moveDown 490
  841.     $billboard moveSouth 16
  842.     $billboard moveWest 107
  843.     waitFor $billboard
  844.     $billboard playsound impact/crates/crate3.wav 3.0
  845.     $glass1 remove
  846.     $glass2 shatter "0 0 0" 25 10 75 .5 0
  847.     $glass3 remove
  848.     $glass2 remove
  849.     $window_bar1 time .5
  850.     $window_bar1 moveDown 368
  851.     $window_bar1 rotateXup 22
  852.     $window_bar1 rotateYup 30
  853.     $window_bar1 moveWest 16
  854.     waitFor $window_bar1
  855.      goto bottom1
  856.  
  857.  
  858. //==========================================
  859. // Billboard destroyed thread2
  860. //==========================================
  861. billboard_fall_sequence_right:
  862.     $billboard_left nodamage
  863.     $billboard_right nodamage
  864.     game.intro_billboard_fall = 3
  865.     wait .3
  866.     $billboard time .4
  867.     $billboard rotateXdown 56
  868.     $billboard moveWest 64
  869.     $billboard moveDown 30
  870.     waitFor $billboard
  871.     $billboard time .7
  872.     $billboard rotateXdown 98
  873.     $billboard rotateZup 5
  874.     $billboard moveDown 495
  875.     $billboard moveSouth 16
  876.     $billboard moveWest 128
  877.     waitFor $billboard
  878.     $billboard time .5
  879.     $billboard rotateXdown 85
  880.     $billboard rotateZup 5
  881.     $billboard moveDown 495
  882.     $billboard moveSouth 16
  883.     $billboard moveWest 128
  884.     waitFor $billboard
  885.     $billboard time .4
  886.     $billboard rotateXdown 71
  887.     $billboard rotateZup 5
  888.     $billboard moveDown 490
  889.     $billboard moveSouth 16
  890.     $billboard moveWest 107
  891.     waitFor $billboard
  892.     $billboard playsound impact/crates/crate3.wav 3.0
  893.     $glass2 shatter "0 0 0" 25 10 75 .5 0
  894.     $glass1 remove
  895.     $glass2 remove
  896.     $glass3 remove
  897.     wait .2
  898.     $billboard time .7
  899.     $window_bar1 time .7
  900.     $window_bar2 time .7
  901.     $window_bar1 moveDown 368
  902.     $window_bar1 rotateXup 22
  903.     $window_bar1 rotateYdown 15
  904.     $window_bar1 moveWest 16
  905.     $window_bar2 moveDown 368
  906.     $window_bar2 rotateXup 22
  907.     $window_bar2 rotateYup 30
  908.     $window_bar2 moveWest 16
  909.     $billboard moveDown 356
  910.     $billboard rotateXup 20
  911.     $billboard rotateZdown 20
  912.     waitFor $billboard
  913.     $fountain_flood time 15
  914.     $fountain_flood moveUp 15
  915.     thread bottom2
  916.     waitFor $fountain_flood
  917.      end
  918.  
  919. bottom1:
  920.       thread dialog::jc_dead_billboard1
  921.     local.waitforthread = parm.previousthread
  922.     waitForThread parm.previousthread
  923.      end
  924.  
  925. bottom2:
  926.     thread dialog::jc_dead_billboard1
  927.     local.waitforthread = parm.previousthread
  928.     waitForThread parm.previousthread
  929.      end
  930.  
  931.  
  932. //==========================================
  933. // Awning at entrance setup thread
  934. //==========================================
  935. bank_entrance_thread:
  936.     $pillar time .6
  937.     $awning1 time .6
  938.     $awning2 time .6
  939.     $awning3 time .6
  940.     $pillar ontrigger bank_entrance_collapse
  941.     pause
  942.  
  943. bank_entrance_collapse:
  944.     $pillar notrigger
  945.     $awning2 shatter "0 0 0" 25 10 75 .10 0
  946.     $pillar rotateZdown 45
  947.     waitFor $pillar
  948.     $pillar rotateZdown 45
  949.     $awning1 rotateZup 45
  950.     $awning2 moveDown 128
  951.     waitFor $awning2
  952.     $awning3 moveDown 100
  953.     $awning1 moveDown 128
  954.     $awning2 moveDown 128
  955.     $awning1 moveSouth 32
  956.     $awning2 rotateZdown 15
  957.     waitFor $awning2
  958.      end
  959.  
  960. pillar:
  961.     $awning2    ondamage start_pillar
  962.     $awning1    ondamage start_pillar
  963.     $pillar ondamage start_pillar
  964.     pause
  965.  
  966. start_pillar:
  967.     $pillar    nodamage
  968.     $awning2    nodamage
  969.     $awning1    nodamage
  970.     trigger $pillar
  971.         level.piller = 2
  972.     level.SObjective1 = 1
  973.     thread MissionComputer
  974.     thread global/universal_script.scr::SObjectiveComplete
  975.      end
  976.  
  977. //==========================================
  978. // Ammo box #1
  979. //==========================================
  980. ammo1_thread:
  981.     $ammo1_roof time 1
  982.     $ammo1 ondamage ammo1_sequence
  983.     pause
  984.  
  985. ammo1_sequence:
  986.     $ammo1 nodamage
  987.     trigger $ammo1_explode
  988.     $ammo1 shatter "0 0 0" 75 10 75 .2 0
  989.     wait .2
  990.     $ammo1 notsolid
  991.     $ammo1 hide
  992.     $ammo1_roof rotateXdown 15
  993.     $ammo1_roof rotateZdown 15
  994.     waitFor $ammo1_roof
  995.     $ammo1_roof moveDown    128
  996.     waitFor $ammo1_roof
  997.      end
  998.  
  999. //==========================================
  1000. // Ammo box #2
  1001. //==========================================
  1002. ammo2_thread:
  1003.     game.intro_roof_break1 ifequal 0 game.intro_roof_break1 = 1
  1004.     $ammo2_roof time .5
  1005.     $ammo2_wall1 time 1.2
  1006.     $ammo2_wall2 time 1.2
  1007.     $ammo2 ondamage ammo2_sequence
  1008.     pause
  1009.  
  1010. ammo2_sequence:
  1011.     $ammo2 nodamage
  1012.     game.intro_roof_break1 = 2
  1013.     trigger $ammo2_explode
  1014.     $ammo2 shatter "0 0 0" 75 10 75 .2 0
  1015.     wait .2
  1016.     $ammo2 notsolid
  1017.     $ammo2 hide
  1018.     $ammo2_roof rotateXdown 15
  1019.     $ammo2_roof rotateZdown 15
  1020.     waitFor $ammo2_roof
  1021.     $ammo2_roof moveDown    128
  1022.     waitFor $ammo2_roof
  1023.      end
  1024.  
  1025. //------------------------------------------
  1026. //******************************************
  1027. //==========================================
  1028. // ALL HELICOPTER STUFF
  1029. //==========================================
  1030. //******************************************
  1031. //------------------------------------------
  1032.  
  1033. //==========================================
  1034. // Helicopter setup thread
  1035. //==========================================
  1036. helicopter_setup_thread:
  1037.     $rotors_brush notsolid            // Rotor origin
  1038.     $rotors_brush hide            // Rotor origin
  1039.     $rotors_brush bind $helicopter
  1040.     $heligun_origin bind $helicopter
  1041.     $blade2 bind $heligun_origin
  1042.     $heligun bind $heligun_origin
  1043.     $heli_fuckshitup bind $helicopter    // Random sound emitter
  1044.     wait .1
  1045.     $rotors bind $rotors_brush
  1046.     wait .1
  1047.     $rotors_brush time 1            // Start rotors spinning
  1048.     $rotors_brush rotateY 720
  1049.      end
  1050.  
  1051. //==========================================
  1052. // Random sounds played from heli
  1053. //==========================================
  1054. random_sounds:
  1055.     wait 10
  1056.  
  1057. random_sound_loop:
  1058.     wait 10
  1059.     local.rndsnd randomint 5
  1060.     local.rndsnd ifequal 1 goto combat_one
  1061.     local.rndsnd ifequal 2 goto combat_two
  1062.     local.rndsnd ifequal 3 goto combat_five
  1063.     local.rndsnd ifequal 4 goto combat_six
  1064.     local.rndsnd ifequal 5 goto combat_seven
  1065.      end
  1066.  
  1067. combat_one:
  1068.     parm.actor1    string    "$heli_fuckshitup"
  1069.     thread dialog::combat_one
  1070.     local.waitforthread = parm.previousthread
  1071.     waitForThread parm.previousthread
  1072.     goto random_sound_loop
  1073.      end
  1074.  
  1075. combat_two:
  1076.     parm.actor1    string    "$heli_fuckshitup"
  1077.     thread dialog::combat_two
  1078.     local.waitforthread = parm.previousthread
  1079.     waitForThread parm.previousthread
  1080.     goto random_sound_loop
  1081.      end
  1082.  
  1083. combat_five:
  1084.     parm.actor1    string    "$heli_fuckshitup"
  1085.     thread dialog::combat_five
  1086.     local.waitforthread = parm.previousthread
  1087.     waitForThread parm.previousthread
  1088.     goto random_sound_loop
  1089.      end
  1090.  
  1091. combat_six:
  1092.     parm.actor1    string    "$heli_fuckshitup"
  1093.     thread dialog::combat_six
  1094.     local.waitforthread = parm.previousthread
  1095.     waitForThread parm.previousthread
  1096.     goto random_sound_loop
  1097.      end
  1098.  
  1099. combat_seven:
  1100.     parm.actor1    string    "$heli_fuckshitup"
  1101.     thread dialog::combat_seven
  1102.     local.waitforthread = parm.previousthread
  1103.     waitForThread parm.previousthread
  1104.     goto random_sound_loop
  1105.      end
  1106.  
  1107. //==========================================
  1108. // Helicopter damage dialog thread
  1109. //==========================================
  1110. heli_damage_dialog:
  1111.     level.helidamage ifgreater 500 goto nextmessage1
  1112.     wait 1
  1113.     goto heli_damage_dialog
  1114.  
  1115. nextmessage1:
  1116.     thread dialog::pilot_hit2
  1117.  
  1118. nextmessage1a:
  1119.     level.helidamage ifgreater 900 goto nextmessage2
  1120.     wait 1
  1121.     goto nextmessage1a
  1122.  
  1123. nextmessage2:
  1124.     thread dialog::pilot_hit1
  1125.  
  1126. nextmessage2a:
  1127.     level.helidamage ifgreater 1250 goto nextmessage3
  1128.     wait 1
  1129.     goto nextmessage2a
  1130.  
  1131. nextmessage3:
  1132.     thread dialog::pilot_hit3
  1133.  
  1134. nextmessage3a:
  1135.     level.helidamage ifgreater 1550 goto nextmessage4
  1136.     wait 1
  1137.     goto nextmessage3a
  1138.  
  1139. nextmessage4:
  1140.     thread dialog::pilot_sec_airsupport
  1141.  
  1142. nextmessage4a:
  1143.     level.helidamage ifgreater 1800 goto nextmessage5
  1144.     wait 1
  1145.     goto nextmessage4a
  1146.  
  1147. nextmessage5:
  1148.     thread dialog::jc_chopper_repair
  1149.  
  1150. nextmessage5a:
  1151.     level.helidamage ifgreater 2000 goto nextmessage6
  1152.     wait 1
  1153.     goto nextmessage5a
  1154.  
  1155. nextmessage6:
  1156.     thread dialog::pilot_going_down
  1157.  
  1158. nextmessage6a:
  1159.     level.helidamage ifgreater 2500 goto fucked
  1160.     wait 1
  1161.     goto nextmessage6a
  1162.  
  1163. fucked:
  1164.     level.PObjective1 = 2
  1165.     level.PObjective2 = 2
  1166.     level.PObjective3 = 2
  1167.     level.SObjective1 = 2
  1168.     thread MissionComputer
  1169.     thread global/universal_script.scr::PObjectiveFailed
  1170.     cueplayer
  1171.     *1 playerkill
  1172.     wait 2.5
  1173.     *1 respawn
  1174.      end
  1175.  
  1176. //==========================================
  1177. // Helicopter Damage sounds
  1178. //==========================================
  1179. heli_hit:
  1180.     level.hitme_hit ifequal 1 goto heli_already_hit
  1181.     level.hitme_hit = 1
  1182.     $rotors playsound misc/null.wav 1 7
  1183.     wait .1
  1184.     $rotors playsound vehicle/helicopt/hit1.wav 2 7
  1185.     wait 3.8
  1186.     $rotors playsound vehicle/helicopt/flyloop.wav 2 7
  1187.     level.hitme_hit = 0
  1188.      end
  1189.  
  1190. heli_already_hit:
  1191.     end
  1192.  
  1193. //==========================================
  1194. // Helicopter Start moving
  1195. //==========================================
  1196. helicopter_ride_thread:            // This is called by thugs talking
  1197.     thread helicopter_setup_thread
  1198.     waitForThread parm.previousthread
  1199.  
  1200. start_copter:                // Copter coming from around the corner
  1201.     wait 2
  1202.     $helicopter followpath $path1_startintro
  1203.     wait 3
  1204.     $rotors playsound vehicle/helicopt/flyloop.wav 2 7
  1205.     waitFor $helicopter
  1206.      end
  1207.  
  1208. start_action_thread:
  1209.     hud 1
  1210.     //releaseplayer
  1211.     $helicopter lock
  1212.     $helicopter doUse *1
  1213.     $blade2    remove
  1214.     $heligun hide
  1215.     $cinematic_thug1    remove
  1216.     $cinematic_thug2    remove
  1217.     thread move_dudes_up
  1218.     releaseplayer
  1219.     fadein 1 0 0 0
  1220.     wait 1
  1221.     music normal
  1222.     thread thugs_attacked_dialog1
  1223.     thread blade_talksmack1
  1224.  
  1225. //==========================================
  1226. // Kill both thugs setup thread
  1227. // This is where the game should jump to
  1228. // if the cinematic is killed
  1229. //==========================================
  1230. kill_cinematic_thugs:
  1231.     thread hover_path
  1232.     local.deathindex = 0
  1233.     level.hoverpathover = 0
  1234.  
  1235. kill_cinematic_thugs_loop:
  1236.     $thug_death_counter ontrigger counterup
  1237.     pause
  1238.  
  1239. counterup:
  1240.     local.deathindex += 1
  1241.     local.deathindex ifequal 2 goto start_level_loop
  1242.     goto kill_cinematic_thugs_loop
  1243.      end
  1244.  
  1245. move_dudes_up:            // Lift real thugs up quake1 style :]
  1246.     $remove_me_for_guys    remove
  1247.     $move_guys_up    time    .1
  1248.     $move_guys_up    moveUp    112
  1249.     waitFor $move_guys_up
  1250.      end
  1251.  
  1252. //==========================================
  1253. // Helicopter Hover loop
  1254. //==========================================
  1255. hover_path:
  1256.     $helicopter followpath $hover_path
  1257.     waitFor $helicopter
  1258.  
  1259.     level.hoverpathover ifequal 1 goto start_heli_loop
  1260.     level.hoverpathover ifequal 0 goto hover_path
  1261.      end
  1262.  
  1263.     start_level_loop:
  1264.     level.hoverpathover = 1
  1265.      end
  1266.  
  1267. heli_loop_dialog_start:
  1268.     thread global/universal_script.scr::StatusUpdated
  1269.     local.waitforthread = parm.previousthread
  1270.     waitForThread parm.previousthread
  1271.     thread dialog::jc_remember_boss
  1272.      end
  1273.  
  1274. //==========================================
  1275. // Start helicopter main loop
  1276. //==========================================
  1277. start_heli_loop:
  1278.     thread heli_loop_dialog_start
  1279.     thread main_level_spawn_loop    // Start up main level bad guy spawn loop
  1280.     $helicopter followpath $down_path
  1281.     waitFor $helicopter
  1282.  
  1283. //==========================================
  1284. // Loop copter, check damage, etc.
  1285. //==========================================
  1286. helicopter_loop_sequence:
  1287.     $helicopter followpath $loop_path
  1288.     waitFor $helicopter
  1289.  
  1290.     level.turretsdead ifequal 5 goto helicopter_land_roof
  1291.     level.complete ifgreaterequal 2 goto helicopter_land_roof
  1292.     level.helidamage iflessequal 2000 goto helicopter_loop_sequence
  1293.  
  1294. //==========================================
  1295. // Helicopter Crashing on ground start
  1296. //==========================================
  1297. $helicopter followpath $road_path
  1298.  
  1299.     thread copter_goin_down
  1300.  
  1301.     waitFor $helicopter
  1302.     $rotors playsound misc/null.wav 1 7
  1303.     wait .1
  1304.     $rotors playsound vehicle/helicopt/hidown.wav 1.0 7
  1305.  
  1306.     thread dialog::pilot_were_down_whew_close
  1307.     $helicopter unlock
  1308.     hud 0
  1309.     trigger $rotors_brush
  1310.     fadeout 1 0 0 0
  1311.     wait 1
  1312.     //thread dialog2        // Dialog not available
  1313.     thread groundcam_thread        // Start end ground cinematic
  1314.     goto heli_end
  1315.  
  1316. //==========================================
  1317. // Helicopter lands on roof
  1318. //==========================================
  1319. helicopter_land_roof:
  1320.     level.PObjective3 = 1
  1321.     thread global/universal_script.scr::PObjectiveComplete
  1322.     thread MissionComputer
  1323.  
  1324.       $helicopter followpath $roof_path
  1325.     waitFor $helicopter
  1326.  
  1327.     thread land_roof_dialogue2_thread
  1328.  
  1329.     $helicopter stopsound
  1330.     $helicopter playsound vehicle/helicopt/hidown.wav 1.0 7
  1331.     thread roofcam_thread    // Start end roof cinematic
  1332.     trigger $rotors_brush
  1333.  
  1334. heli_end:
  1335.      end
  1336.  
  1337. //==========================================
  1338. // Helicopter monitor damage thread
  1339. //==========================================
  1340. helicopter_damage_thread:
  1341.  
  1342. helicopter_damage_start:
  1343.     $helicopter ondamage heli_damage_sequence
  1344.     $rotors ondamage heli_damage_sequence
  1345.     pause
  1346.  
  1347. heli_damage_sequence:
  1348.     $helicopter nodamage
  1349.     $rotors nodamage
  1350.     thread heli_hit        // Helicopter damage sounds
  1351.     level.helidamage += local.damage
  1352.     goto helicopter_damage_start
  1353.      end
  1354.  
  1355. //==========================================
  1356. // Helicopter Rotor Spindown
  1357. //==========================================
  1358. rotors_spin_down_thread:
  1359.     level.rotors_speed = 720
  1360.     $rotors_brush ontrigger rotors_spin_down_loop_begin
  1361.     pause
  1362.  
  1363. rotors_spin_down_loop_begin:
  1364.     $rotors_brush notrigger
  1365.     rotors_spin_down_loop:
  1366.     level.rotors_speed -= 5
  1367.     $rotors_brush rotateY level.rotors_speed
  1368.     wait .1
  1369.     level.rotors_speed ifgreater 0 goto rotors_spin_down_loop
  1370.      end
  1371.  
  1372. //==========================================
  1373. // Helicopter Goto Roof
  1374. //==========================================
  1375. roofheli_thread:
  1376.     wait 1
  1377.     $helicopter followpath $roofhelistart
  1378.     waitFor $helicopter
  1379.      end
  1380. //******************************************
  1381. //==========================================
  1382. // End of Helicopter section
  1383. //==========================================
  1384. //******************************************
  1385.  
  1386.  
  1387.  
  1388. //------------------------------------------
  1389. //******************************************
  1390. //==========================================
  1391. // LEVEL DIALOG THREADS
  1392. //==========================================
  1393. //******************************************
  1394. //------------------------------------------
  1395.  
  1396. //==========================================
  1397. // Thugs Talking at start of action
  1398. //==========================================
  1399. thugs_attacked_dialog1:
  1400.     parm.thug1    string    "$dialog_airattack"
  1401.     thread dialog::thug_air_attack
  1402.      end
  1403.  
  1404. thugs_attacked_dialog2:
  1405.     parm.thug1    string    "$dialog_runforcover"
  1406.     thread dialog::thug_get_to_launchers1
  1407.  
  1408. blade_talksmack1:
  1409.     wait 2
  1410.     thread dialog::blade_not_so_fast
  1411.      end
  1412.  
  1413. //==========================================
  1414. // Pilot says "copter goin down!"
  1415. //==========================================
  1416. copter_goin_down:
  1417.     thread dialog::pilot_controls_arent_responding
  1418.     local.waitforthread = parm.previousthread
  1419.     waitForThread parm.previousthread
  1420.     thread dialog::blade_uh_oh
  1421.     wait 2
  1422.     thread dialog::pilot_hang_on1
  1423.      end
  1424.  
  1425. dialog2:
  1426.     wait 3
  1427.     thread dialog::jc_get_in_there
  1428.      end
  1429.  
  1430. land_roof_dialogue1_thread:
  1431.     wait 2
  1432.     thread dialog::jc_rooftop_landin
  1433.     local.waitforthread = parm.previousthread
  1434.     waitForThread parm.previousthread
  1435.      end
  1436.  
  1437. land_roof_dialogue2_thread:
  1438.     thread dialog::pilot_drop_and_dust
  1439.      end
  1440.  
  1441. //------------------------------------------
  1442. //******************************************
  1443. //==========================================
  1444. // LEVEL GAMEPLAY AND LOGIC
  1445. //==========================================
  1446. //******************************************
  1447. //------------------------------------------
  1448.  
  1449. //==========================================
  1450. // Temp scriptobject for turret death level variables
  1451. //==========================================
  1452. turret1_deathreport:
  1453.     $turret1_dead    ontrigger    1change
  1454.     pause
  1455.  
  1456. 1change:
  1457.     $turret1_dead    remove
  1458.     level.turret1_nuked = 1
  1459.      end
  1460.  
  1461. turret2_deathreport:
  1462.     $turret2_dead    ontrigger    2change
  1463.     pause
  1464.  
  1465. 2change:
  1466.     $turret2_dead    remove
  1467.     level.turret2_nuked = 1
  1468.      end
  1469.  
  1470. turret3_deathreport:
  1471.     $turret3_dead    ontrigger    3change
  1472.     pause
  1473.  
  1474. 3change:
  1475.     $turret3_dead    remove
  1476.     level.turret3_nuked = 1
  1477.      end
  1478.  
  1479. //==========================================
  1480. // Main level Loop (for spawning characters.
  1481. // and randomly choosing stuff to happen in
  1482. // the streets)
  1483. //==========================================
  1484. main_level_spawn_loop:
  1485.     level.complete ifgreater 0 thread spawn_levelisdone
  1486.     level.complete ifgreater 0 goto end_main
  1487.     thread spawn_check_bad_guys
  1488.     wait 3
  1489.     goto main_level_spawn_loop
  1490.  
  1491. end_main:
  1492.      end
  1493.  
  1494. //==========================================
  1495. // Psyco spawn BAD GUY checking thread
  1496. //==========================================
  1497. spawn_check_bad_guys:
  1498.     level.count_bad_guys ifequal 3 goto spawn_check_end
  1499.     goto spawn_roof_check
  1500.      end
  1501.  
  1502.     //Spawn guys on roof randomness
  1503. spawn_roof_check:
  1504.     local.rndroof randomint 100
  1505.     local.rndroof iflessequal 33 goto turret1_startspawn
  1506.     local.rndroof ifgreater 33 goto more_roof_rnd
  1507.  
  1508. more_roof_rnd:
  1509.     local.rndroof iflessequal 66 goto turret2_startspawn
  1510.     local.rndroof ifgreater 66 goto turret3_startspawn
  1511.      end
  1512.  
  1513. turret1_startspawn:
  1514.     level.turret1_active ifequal 1 goto spawn_guythere
  1515.     level.turret1_nuked ifequal 1 goto spawn_guythere
  1516.     level.turret1_active ifequal 0 thread spawn_guy_at_turret1
  1517.      end
  1518.  
  1519. turret2_startspawn:
  1520.     level.turret2_active ifequal 1 goto spawn_guythere
  1521.     level.turret2_nuked ifequal 1 goto spawn_guythere
  1522.     level.turret2_active ifequal 0 thread spawn_guy_at_turret2
  1523.      end
  1524.  
  1525. turret3_startspawn:
  1526.     level.turret3_active ifequal 1 goto spawn_guythere
  1527.     level.turret3_nuked ifequal 1 goto spawn_guythere
  1528.     level.turret3_active ifequal 0 thread spawn_guy_at_turret3
  1529.      end
  1530.  
  1531. spawn_levelisdone:
  1532.     level.count_bad_guys ifequal 0 goto obj2_done
  1533.     wait 1
  1534.     goto spawn_levelisdone
  1535.  
  1536. obj2_done:
  1537.     level.complete += 1
  1538.     level.PObjective2 = 1
  1539.     thread MissionComputer
  1540.     thread global/universal_script.scr::PObjectiveComplete
  1541.     wait 1
  1542.     thread land_roof_dialogue1_thread    // Turrets dead, no more baddies
  1543.      end
  1544.  
  1545. spawn_check_end:    // Enough Bad guys
  1546.      end
  1547.  
  1548. spawn_guythere:        // Bad guy already there
  1549.      end
  1550.  
  1551. //==========================================
  1552. //==========================================
  1553. // Turret counter and level.complete state.
  1554. //==========================================
  1555. turret_death_wait:
  1556.     local.turret_death_index = 0
  1557.  
  1558. turret_death_loop:
  1559.     $turret_death_counter    ontrigger    count_turret
  1560.     pause
  1561.  
  1562. count_turret:
  1563.     $turret_death_counter    notrigger
  1564.     local.turret_death_index += 1
  1565.     local.turret_death_index ifequal 3 goto turrets_dead
  1566.     local.turret_death_index ifequal 1 thread dialog::pilot_nice_shooting
  1567.     local.turret_death_index ifequal 2 thread dialog::jc_way_to_hit
  1568.     goto turret_death_loop
  1569.  
  1570. turrets_dead:
  1571.     level.turretsdead = 5
  1572.     level.PObjective1 = 1
  1573.     thread MissionComputer
  1574.     thread global/universal_script.scr::PObjectiveComplete
  1575.     level.complete += 1
  1576.      end
  1577.  
  1578. //==========================================
  1579. // Spawn People in to turrets
  1580. //==========================================
  1581. // Removed window guys Spawn code 9/29
  1582. //==========================================
  1583. spawn_guy_at_turret1:        // Thug1 dude
  1584.     trigger $spawner1
  1585.     level.count_bad_guys += 1
  1586.     level.turret1_active = 1
  1587.     wait .1
  1588.     $thug1    thread thug1_setstates
  1589.     wait 2
  1590.     trigger $thug1
  1591.      end
  1592.  
  1593. thug1_setstates:
  1594.     local.self    ignore    runtoarea
  1595.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1596.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1597.     local.self    ignore    attackentity use sightenemy
  1598.  
  1599.     local.self    definestate    activate    thug1_activated
  1600.     local.self    definestate    killed    thug1_killed
  1601.     local.self    definestate    idle    thug1_idle
  1602.  
  1603.     local.self    state    idle
  1604.  
  1605.     pause
  1606.  
  1607. thug1_idle:
  1608.     local.self    anim    idle
  1609.     waitFor local.self
  1610.     pause
  1611.     goto thug1_idle
  1612.  
  1613. thug1_activated:
  1614.     $door1    open $thug1
  1615.     local.self      ignore  activate
  1616.     local.self    runto    $turret1_path1
  1617.     waitFor local.self
  1618.     local.self    runto    $turret1_path2
  1619.     waitFor local.self
  1620.     $turret1    activate
  1621.     local.self    anim    manrocket1
  1622.     pause
  1623.      end
  1624.  
  1625. thug1_killed:
  1626.     $turret1    deactivate
  1627.     level.turret1_active = 0
  1628.     level.count_bad_guys -= 1
  1629.      end
  1630.  
  1631. spawn_guy_at_turret2:        // Thug2 dude
  1632.     trigger $spawner2
  1633.     level.count_bad_guys += 1
  1634.     level.turret2_active = 1
  1635.     wait .1
  1636.     $thug2    thread thug2_setstates
  1637.     wait 2
  1638.     trigger $thug2
  1639.      end
  1640.  
  1641. thug2_setstates:
  1642.     local.self    ignore    runtoarea
  1643.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1644.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1645.     local.self    ignore    attackentity use sightenemy
  1646.  
  1647.     local.self    definestate    activate    thug2_activated
  1648.     local.self    definestate    killed    thug2_killed
  1649.     local.self    definestate    idle    thug2_idle
  1650.  
  1651.     local.self    state    idle
  1652.  
  1653.     pause
  1654.  
  1655. thug2_idle:
  1656.     local.self    anim    idle
  1657.     waitFor local.self
  1658.     pause
  1659.     goto thug2_idle
  1660.  
  1661. thug2_activated:
  1662.     $door2    open $thug2
  1663.     local.self      ignore  activate
  1664.     local.self    runto    $turret2_path1
  1665.     waitFor local.self
  1666.     local.self    runto    $turret2_path2
  1667.     waitFor local.self
  1668.     $turret2    activate
  1669.     local.self    anim    manrocket1
  1670.     pause
  1671.      end
  1672.  
  1673. thug2_killed:
  1674.     $turret2    deactivate
  1675.     level.turret2_active = 0
  1676.     level.count_bad_guys -= 1
  1677.     //thread spawn_guy_at_turret2
  1678.     end
  1679.  
  1680. spawn_guy_at_turret3:        // Thug3 dude
  1681.     trigger $spawner3
  1682.     level.count_bad_guys += 1
  1683.     level.turret3_active = 1
  1684.     wait .1
  1685.     $thug3    thread thug3_setstates
  1686.     wait 2
  1687.     trigger $thug3
  1688.      end
  1689.  
  1690. thug3_setstates:
  1691.     local.self    ignore    runtoarea
  1692.     local.self    ignore    doorsound mutantsound voicesound machinesound radiosound
  1693.     local.self    ignore    weaponsound movementsound painsound deathsound breakingsound
  1694.     local.self    ignore    attackentity use sightenemy
  1695.  
  1696.     local.self    definestate    activate    thug3_activated
  1697.     local.self    definestate    killed    thug3_killed
  1698.     local.self    definestate    idle    thug3_idle
  1699.  
  1700.     local.self    state    idle
  1701.  
  1702.     pause
  1703.  
  1704. thug3_idle:
  1705.     local.self    anim    idle
  1706.     waitFor local.self
  1707.     pause
  1708.     goto thug3_idle
  1709.  
  1710. thug3_activated:
  1711.     $door3    open $thug3
  1712.     local.self      ignore  activate
  1713.     local.self    runto    $turret3_path1
  1714.     waitFor local.self
  1715.     local.self    runto    $turret3_path2
  1716.     waitFor local.self
  1717.     $turret3    activate
  1718.     local.self    anim    manrocket1
  1719.     pause
  1720.      end
  1721.  
  1722. thug3_killed:
  1723.     $turret3    deactivate
  1724.     level.turret3_active = 0
  1725.     level.count_bad_guys -= 1
  1726.     //thread spawn_guy_at_turret3
  1727.      end
  1728.  
  1729. precache:
  1730.   cachesound "environment/alarm/police/siren2.wav"
  1731.   cachesound "environment/alarm/police/siren2down.wav"
  1732.   cachesound "impact/comp_explode/cmpmx3.wav"
  1733.   cachesound "impact/crates/crate3.wav"
  1734.   cachesound "misc/null.wav"
  1735.   cachesound "vehicle/helicopt/hit1.wav"
  1736.   cachesound "vehicle/helicopt/flyloop.wav"
  1737.   cachesound "vehicle/helicopt/hidown.wav"
  1738.   cachesound "vehicle/atv/strt.wav"
  1739.   cachesound "vehicle/humvee/skid.wav"
  1740. end
  1741.  
  1742. LevelComplete:
  1743. // Clears any items in the player's inventory that need to be removed
  1744. thread global/universal_script.scr::ClearInventory
  1745.  
  1746. // Any objectives that haven't been set to Success or Fail should be set
  1747. // here. This usually is for things like "Eliminate All Hostile Forces"
  1748. // All Objectives need to be set to Success or Fail by the end of the
  1749. // map. This should be automatic for the most part but if you
  1750. // Find any that aren't, we need to figure out what to do with them.
  1751. level.SObjective1 ifnotequal 1 level.SObjective1 = 2
  1752. level.PObjective1 ifnotequal 1 level.PObjective1 = 2
  1753. level.PObjective2 ifnotequal 1 level.PObjective2 = 2
  1754. level.PObjective3 ifnotequal 1 level.PObjective3 = 1
  1755.  
  1756. // Set up the Primary Objectives
  1757. local.IMString string "oxl 2 oyt -32 fc 0.53 0.53 0.83 1 string \"Primary Objective(s):\""
  1758.  
  1759. level.PObjective1 ifequal 1 local.IMString append "oxl 6 oyt -42 spicn b_checked 0.5 0.5 oxl 18 oyt -42 fc 0.6 0.6 0.6 1 string \"Destroy Rocket Turrets\""
  1760. level.PObjective2 ifequal 1 local.IMString append "oxl 6 oyt -52 spicn b_checked 0.5 0.5 oxl 18 oyt -52 fc 0.6 0.6 0.6 1 string \"Eliminate All Enemy Forces\""
  1761. level.PObjective3 ifequal 1 local.IMString append "oxl 6 oyt -62 spicn b_checked 0.5 0.5 oxl 18 oyt -62 fc 0.6 0.6 0.6 1 string \"Gain Entry Into The Bank\""
  1762.  
  1763. level.PObjective1 ifequal 2 local.IMString append "oxl 6 oyt -42 spicn b_notchecked 0.5 0.5 oxl 18 oyt -42 fc 0.6 0.6 0.6 1 string \"Destroy Rocket Turrets\""
  1764. level.PObjective2 ifequal 2 local.IMString append "oxl 6 oyt -52 spicn b_notchecked 0.5 0.5 oxl 18 oyt -52 fc 0.6 0.6 0.6 1 string \"Eliminate All Enemy Forces\""
  1765. level.PObjective3 ifequal 2 local.IMString append "oxl 6 oyt -62 spicn b_notchecked 0.5 0.5 oxl 18 oyt -62 fc 0.6 0.6 0.6 1 string \"Gain Entry Into The Bank\""
  1766.  
  1767.  
  1768. // Set up the Secondary Objectives
  1769. local.IMString append "oxl 2 oyt -82 fc 0.53 0.53 0.83 1 string \"Secondary Objective(s):\""
  1770.  
  1771. level.SObjective1 ifequal 1 local.IMString append "oxl 6 oyt -92 spicn b_checked 0.5 0.5 oxl 18 oyt -92 fc 0.6 0.6 0.6 1 string \"Minimize Hardcorp Casualties\""
  1772.  
  1773. level.SObjective1 ifequal 2 local.IMString append "oxl 6 oyt -92 spicn b_notchecked 0.5 0.5 oxl 18 oyt -92 fc 0.6 0.6 0.6 1 string \"Minimize Hardcorp Casualties\""
  1774.  
  1775. // Send over the information that Scott needs to load the proper intermission
  1776. level.intermissiontype ifequal 1 loadintermission "layouts/im_layouts/intro_to_bank_B"
  1777. level.intermissiontype ifequal 2 loadintermission "layouts/im_layouts/intro_to_bank_A"
  1778. intermissionlayout local.IMString
  1779. end